#include<iostream>
#include<vector>
using namespace std;
bool isValid(vector<vector<char>> board,char k,int i,int j)
{
    for(int a=0;a<9;a++)
    {
        if(k==board[i][a])
            return false;
    }
    for(int a=0;a<9;a++)
    {
        if(k==board[a][j])
            return false;
    }
    int a = i/3;
    int b = j/3;
    for(int c=a*3;c<a*3+3;c++)
    {
        for(int d=b*3;d<b*3+3;d++)
        {
            if(k==board[c][d])
                return false;
        }
    }
    return true;
}
bool backtracking(vector<vector<char>>& board)
{
    for(int i=0;i<9;i++)
    {
        for(int j=0;j<9;j++)
        {
            //若该位置需要填入数
            if(board[i][j]=='.')
            {
                for(char k='1';k<='9';k+1)
                {
                    //判断是否满足取数条件
                    if(!isValid(board,k,i,j))
                        continue;
                    //若满足条件则放入
                    board[i][j] = k;
                    bool result = backtracking(board);
                    if(result) return true;
                    board[i][j] = '.';
                }
            }
        }
    }
    return false;
}
void solveSudoku(vector<vector<char>>& board) {
    backtracking(board);
}
int main()
{
    cout<<"enter array:"<<endl;
    vector<vector<char>> array(9,vector<char>(9));
    for(int i=0;i<9;i++)
        for(int j=0;j<9;j++)
            cin>>array[i][j];
    solveSudoku(array);
    for(int i=0;i<9;i++)
    {
        for(int j=0;j<9;j++)
        {
            cout<<array[i][j]<<" ";
        }
        cout<<endl;
    }
}